[iOS] CargoBayを使用したアプリ内課金(実装編)
1 はじめに
前回、CargoBayを使用したアプリ内課金の各種処理について確認しましたが、今回は、これら組み合わせて5つのタイプ(消耗型、非消耗型、自動更新登録、非更新登録、無料登録)を実装をしてみました。
CargoBayについては、前回の記事をご参照ください。
[iOS]CargoBayを使用したアプリ内課金 (各種処理編)
2 消耗型の実装
実装しなければならないのは、下記の4項目です。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
「購入」ボタンが押されたタイミングでトランザクションを開始して、レスポンスで、SKPaymentTransactionStatePurchasedが返った時に「トランザクションの確認」を入れればいいだけです。
3 非消耗型の実装
実装しなければならないのは、消耗型の処理に「リストア」を加えたものになります。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- (5) リストア
と言っても、リストアは1行のコードでトランザクション開始され、SKPaymentTransactionStateRestoredのレスポンスが返った際に、「購入完了」の時と同じように「トランザクションの確認」を実行するだけです。
新しい、端末に移動しても、リストアで購入情報の復元が出来ます。
4 自動更新登録の実装
実装としては、非消耗型と全く同じです。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- (5) リストア
ただし、「(4)トランザクションの確認」でパスワード(共有シークレット)が必要です。
パスワードは、iThunes Connectでアプリを登録した際に、「機能」の中の「App内課金」を選択した際に表示されている、「共有シークレットを表示」のリンクから確認できます。
新しい、端末に移動しても、リストアで購入情報の復元が出来ます。ただし、ここで返ってくるのは、最新のものだけでなく更新された前の記録も返りますので、期限などで最新のものを確認する必要があります。
下記の例では、自動更新の期間を7日間で作成しましたが、試験環境なので、3分で7日という感じで動作しているようです。
7 非更新登録
実装としては、非消耗型とほぼ同じですが、「非更新登録」では、リストアAPIが使用できないため、必要な情報を保存する仕組みが必要です。 この際、別端末や再インストールに対応するためには、ローカル以外に保存するしかありません。サンプルでは、iCludeに保存する方法をとっています。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- データ保存
- データ読み込み
リストアボタンを押した時は、データ読み込みを行います。
下記は、iCludeを利用した、保存と、読み込みのコードです。
// データ保存 - (BOOL) savePurchaseData :(NSArray *)purchaseData { [self appendLog:@"\n>iCloudへの保存"]; // iCloudへのデータ保存 NSUbiquitousKeyValueStore* cloudStore = [NSUbiquitousKeyValueStore defaultStore]; [cloudStore setObject: purchaseData forKey: @"purchaseData"]; return [cloudStore synchronize]; } // データ読み込み - (NSArray *) readPurchaseData { [self appendLog:@"\n>iCloudからの読み込み"]; // iCloudからのデータ読み込み NSUbiquitousKeyValueStore* cloudStore = [NSUbiquitousKeyValueStore defaultStore]; [cloudStore synchronize]; return [cloudStore arrayForKey: @"purchaseData"]; }
6 無料登録の実装
実装としては、非消耗型と全く同じです。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- (5) リストア
新しい、端末に移動しても、リストアで購入情報の復元が出来ます。
無料登録の場合は、iTunes Connect における、下記のような課金プロダクトの追加が必要ありません。というか「App内課金+」の項目自体がありません。
「機能」の「App内課金」の所で、プロダクトを追加するだけで有効になっています。
7 最後に
今回は、CargoBayを使用したアプリ内課金の各種処理をこれら組み合わせて、5つのタイプ(消耗型、非消耗型、自動更新登録、非更新登録、無料登録)を実装をしてみました。
全タイプ、ほとんど同じ実装で対応可能ですが、一部の違いが、本記事で伝われば幸いです。
8 参考資料
https://github.com/mattt/CargoBay
https://cocoapods.org/pods/CargoBay
[iOS]CargoBayを使用したアプリ内課金 (各種処理編)